home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1997 February / EnigmA AMIGA RUN 15 (1997)(G.R. Edizioni)(IT)[!][issue 1997-02][PLANET CD V].iso / enigma / earcd / sviluppo / svilupp2 / gtdrag22.lha / gtdrag / test / dragtest.c < prev    next >
C/C++ Source or Header  |  1996-11-06  |  10KB  |  341 lines

  1. ;/* dragtest.c - Test for the gtdrag.library, 6.11.1996
  2. ;**
  3. ;** (C) Copyright 1996 Axel Dörfler
  4. ;**     All rights reserved
  5. ;**
  6. sc dragtest.c link ign=73 data=near nodbg parm=b nochkabort nostkchk strmer streq to=ram:dragtest
  7. run ram:dragtest
  8. quit
  9. */
  10.  
  11. #define INTUI_V36_NAMES_ONLY
  12.  
  13. #include <exec/libraries.h>
  14. #include <exec/nodes.h>
  15. #include <exec/lists.h>
  16. #include <exec/ports.h>
  17. #include <exec/memory.h>
  18. #include <intuition/intuition.h>
  19. #include <intuition/gadgetclass.h>
  20. #include <graphics/gfx.h>
  21. #include <graphics/gfxmacros.h>
  22. #include <libraries/gadtools.h>
  23. #include <libraries/gtdrag.h>
  24. #include <libraries/asl.h>
  25. #include <dos/dos.h>
  26.  
  27. #include <clib/alib_protos.h>
  28. #include <clib/alib_stdio_protos.h>
  29. #include <clib/gtdrag_protos.h>
  30. #include <proto/exec.h>
  31. #include <proto/gadtools.h>
  32. #include <proto/intuition.h>
  33. #include <proto/graphics.h>
  34. #include <proto/layers.h>
  35. #include <proto/utility.h>
  36. #include <proto/dos.h>
  37. #include <pragmas/gtdrag_pragmas.h>
  38.  
  39. #include <stdlib.h>
  40. #include <ctype.h>
  41. #include <string.h>
  42.  
  43. void main(int, char **);
  44.  
  45. #define TLn(t) TextLength(&scr->RastPort,t,strlen(t))
  46.  
  47. UWORD chip newImgData[52] =
  48. {
  49.         /* Plane 0 */
  50.         0x0000,0x0020,0x3FFF,0xFFE0,0x3FFF,0xFFE0,0x3FFF,0xFFE0,
  51.         0x3FFF,0xFFE0,0x3FFF,0xFFE0,0x3FFF,0xFFE0,0x3FFF,0xFFE0,
  52.         0x3FFF,0xFFE0,0x3FFF,0xFFE0,0x3FFF,0xFFE0,0x3FFF,0xFFE0,
  53.         0x7FFF,0xFFE0,
  54.         /* Plane 1 */
  55.         0xFFFF,0xFFC0,0xFFFF,0xFF80,0xF3BF,0xFF80,0xF3BF,0xFF80,
  56.         0xF5B3,0x6D80,0xF5AD,0x6D80,0xF6A1,0xAB80,0xF6AF,0xAB80,
  57.         0xF72D,0xD780,0xF733,0xD780,0xFFFF,0xFF80,0xFFFF,0xFF80,
  58.         0x8000,0x0000
  59. };
  60.  
  61. struct Image newImg = {0,0,27,13,2,newImgData,0x0003,0x0000,NULL};
  62.  
  63. struct Screen *scr;
  64. struct Window *win;
  65. struct IntuiMessage imsg;
  66. struct Library *GTDragBase;
  67. struct Gadget *glist,*lvgad[2],*gad[3];
  68. struct NewGadget ng;
  69. struct List list[2];
  70. struct Node *node;
  71. struct ImageNode in;
  72. APTR   vi;
  73. int    fontheight;
  74. BOOL   ende = FALSE;
  75.  
  76.  
  77. void InsertAt(struct List *l,struct Node *n,int pos)
  78. {
  79.   struct Node *pn;
  80.   int    i;
  81.  
  82.   if (pos)
  83.   {
  84.     pos--;
  85.     for(pn = l->lh_Head,i = 0;i<pos;pn = pn->ln_Succ,i++);
  86.     Insert(l,n,pn);
  87.   }
  88.   else
  89.     AddHead(l,n);
  90. }
  91.  
  92.  
  93. void MoveTo(struct Node *n,struct List *l1,int pos1,struct List *l2,int pos2)
  94. {
  95.   struct Node *pn;
  96.   int    i;
  97.  
  98.   if (l1 == l2 && pos1 == pos2)
  99.     return;
  100.   Remove(n);
  101.  
  102.   if (pos2)
  103.   {
  104.     pos2--;
  105.     for(pn = l2->lh_Head,i = 0;i<pos2;pn = pn->ln_Succ,i++);
  106.     Insert(l2,n,pn);
  107.   }
  108.   else
  109.     AddHead(l2,n);
  110. }
  111.  
  112.  
  113. void processMsg(void)
  114. {
  115.   struct IntuiMessage *msg;
  116.   struct DragMsg *dm;
  117.   int source,target;
  118.  
  119.   while(!ende)
  120.   {
  121.     WaitPort(win->UserPort);
  122.     while(msg = GTD_GetIMsg(win->UserPort))
  123.     {
  124.       imsg = *msg;
  125.       GTD_ReplyIMsg(msg);
  126.  
  127.       if (dm = GTD_GetDragMsg())
  128.       {
  129.         if (dm->dm_SourceApp)
  130.         {
  131.           DisplayBeep(NULL);
  132.         }
  133.         else
  134.         {
  135.           switch(dm->dm_Type)
  136.           {
  137.             case DMT_GADGET:
  138.               target = ((struct DragGadget *)dm->dm_Target)->dg_Gadget->GadgetID;
  139.               switch(target)
  140.               {
  141.                 case 1:
  142.                 case 2:
  143.                   source = dm->dm_Source->dg_Gadget->GadgetID;
  144.                   if (source<3)
  145.                   {
  146.                     source--;  target--;
  147.                     GT_SetGadgetAttrs(lvgad[0],win,NULL,GTLV_Labels,~0L,TAG_END);
  148.                     GT_SetGadgetAttrs(lvgad[1],win,NULL,GTLV_Labels,~0L,TAG_END);
  149.                     MoveTo((APTR)dm->dm_Object,&list[source],dm->dm_SourceEntry,&list[target],dm->dm_TargetEntry);
  150.                     GT_SetGadgetAttrs(lvgad[0],win,NULL,GTLV_Labels,&list[0],TAG_END);
  151.                     GT_SetGadgetAttrs(lvgad[1],win,NULL,GTLV_Labels,&list[1],TAG_END);
  152.                   }
  153.                   else
  154.                   {
  155.                     target--;
  156.                     GT_SetGadgetAttrs(lvgad[target],win,NULL,GTLV_Labels,~0L,TAG_END);
  157.                     if (node = AllocMem(sizeof(struct Node),MEMF_CLEAR | MEMF_PUBLIC))
  158.                     {
  159.                       node->ln_Name = in.in_Name;
  160.                       InsertAt(&list[target],node,dm->dm_TargetEntry);
  161.                     }
  162.                     GT_SetGadgetAttrs(lvgad[target],win,NULL,GTLV_Labels,&list[target],TAG_END);
  163.                   }
  164.                   break;
  165.                 case 3:
  166.                   DisplayBeep(NULL);
  167.                   break;
  168.                 case 4:
  169.                 case 5:
  170.                   source = dm->dm_Source->dg_Gadget->GadgetID-1;
  171.                   GT_SetGadgetAttrs(lvgad[source],win,NULL,GTLV_Labels,~0L,TAG_END);
  172.                   if (target==4)
  173.                   {
  174.                     if (node = AllocMem(sizeof(struct Node),MEMF_CLEAR | MEMF_PUBLIC))
  175.                     {
  176.                       node->ln_Name = dm->dm_Object->in_Name;
  177.                       AddTail(&list[source],node);
  178.                      }
  179.                   }
  180.                   else
  181.                   {
  182.                     Remove((struct Node *)dm->dm_Object);
  183.                     FreeMem(dm->dm_Object,sizeof(struct Node));
  184.                   }
  185.                   GT_SetGadgetAttrs(lvgad[source],win,NULL,GTLV_Labels,&list[source],TAG_END);
  186.                   break;
  187.               }
  188.               break;
  189.             case DMT_UNKNOWN:
  190.               DisplayBeep(NULL);
  191.               break;
  192.             case DMT_WINDOW:
  193.               break;
  194.           }
  195.         }
  196.         GTD_ReplyDragMsg(dm);
  197.       }
  198.       switch(imsg.Class)
  199.       {
  200.         case IDCMP_GADGETDOWN:
  201.           break;
  202.         case IDCMP_GADGETUP:
  203.           switch(((struct Gadget *)imsg.IAddress)->GadgetID)
  204.           {
  205.             case 3:
  206.               GT_SetGadgetAttrs(lvgad[0],win,NULL,GTLV_Labels,~0L,TAG_END);
  207.               if (node = AllocMem(sizeof(struct Node),MEMF_CLEAR | MEMF_PUBLIC))
  208.               {
  209.                 node->ln_Name = in.in_Name;
  210.                 AddTail(&list[0],node);
  211.               }
  212.               GT_SetGadgetAttrs(lvgad[0],win,NULL,GTLV_Labels,&list[0],TAG_END);
  213.               break;
  214.           }
  215.           break;
  216.         case IDCMP_CLOSEWINDOW:
  217.           ende = TRUE;
  218.           break;
  219.       }
  220.     }
  221.   }
  222. }
  223.  
  224. const STRPTR txt[] = {"1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17","18","19","20"};
  225.  
  226. struct Window *initWindow(void)
  227. {
  228.   struct Window *win;
  229.  
  230.   gad[0] = CreateContext(&glist);
  231.  
  232.   ng.ng_LeftEdge = 8;
  233.   ng.ng_TopEdge = fontheight+7;
  234.   ng.ng_Width = 192;
  235.   ng.ng_Height = 11*fontheight+4;
  236.   ng.ng_VisualInfo = vi;
  237.   ng.ng_TextAttr = scr->Font;
  238.   ng.ng_GadgetText = NULL;
  239.   ng.ng_UserData = NULL;
  240.   ng.ng_GadgetID = 1;
  241.   lvgad[0] = CreateGadget(LISTVIEW_KIND,gad[0],&ng,GTLV_Labels,&list[0],TAG_END);
  242.  
  243.   ng.ng_LeftEdge = 206;
  244.   ng.ng_Width = 186;
  245.   ng.ng_GadgetText = NULL;
  246.   ng.ng_GadgetID++;
  247.   lvgad[1] = CreateGadget(LISTVIEW_KIND,lvgad[0],&ng,GTLV_Labels,&list[1],TAG_END);
  248.  
  249.   ng.ng_TopEdge += ng.ng_Height+3;
  250.   ng.ng_LeftEdge = 8;
  251.   ng.ng_Height = fontheight+4;
  252.   ng.ng_Width = TLn("New")+16;
  253.   ng.ng_Flags = PLACETEXT_IN;
  254.   ng.ng_GadgetText = "New";
  255.   ng.ng_GadgetID++;
  256.   gad[0] = CreateGadget(BUTTON_KIND,lvgad[1],&ng,GA_Immediate,TRUE,TAG_END);
  257.  
  258.   ng.ng_LeftEdge += ng.ng_Width+6;
  259.   ng.ng_Width = TLn("Copy")+16;
  260.   ng.ng_GadgetText = "Copy";
  261.   ng.ng_GadgetID++;
  262.   gad[1] = CreateGadget(BUTTON_KIND,gad[0],&ng,TAG_END);
  263.  
  264.   ng.ng_LeftEdge += ng.ng_Width+6;
  265.   ng.ng_Width = TLn("Delete")+16;
  266.   ng.ng_GadgetText = "Delete";
  267.   ng.ng_GadgetID++;
  268.   gad[2] = CreateGadget(BUTTON_KIND,gad[1],&ng,TAG_END);
  269.  
  270.   if (win = OpenWindowTags(NULL,WA_Title,   "gtdrag - Test",
  271.                                 WA_Flags,   WFLG_CLOSEGADGET | WFLG_DRAGBAR | WFLG_DEPTHGADGET | WFLG_ACTIVATE,
  272.                                 WA_IDCMP,   IDCMP_CLOSEWINDOW | DRAGIDCMP,
  273.                                 WA_Width,   400,
  274.                                 WA_Height,  fontheight*13+23,
  275.                                 WA_Gadgets, glist,
  276.                                 TAG_END))
  277.   {
  278.     GT_RefreshWindow(win,NULL);
  279.     GTD_AddGadget(LISTVIEW_KIND,lvgad[0],win,GTDA_Mask,1,GTDA_Same,TRUE,TAG_END);
  280.     GTD_AddGadget(LISTVIEW_KIND,lvgad[1],win,GTDA_Mask,1,GTDA_Same,TRUE,TAG_END);
  281.     GTD_AddGadget(BUTTON_KIND,gad[0],win,GTDA_Images,TRUE,GTDA_Object,     &in,
  282.                                                           GTDA_Mask,       2,
  283.                                                           GTDA_AcceptMask, 0,
  284.                                                           GTDA_Width,      newImg.Width,
  285.                                                           GTDA_Height,     newImg.Height,
  286.                                                           TAG_END);
  287.     GTD_AddGadget(BUTTON_KIND,gad[1],win,GTDA_AcceptMask,1,TAG_END);
  288.     GTD_AddGadget(BUTTON_KIND,gad[2],win,GTDA_AcceptMask,1,TAG_END);
  289.     GTD_AddWindow(win,TAG_END);
  290.     return(win);
  291.   }
  292.   return(NULL);
  293. }
  294.  
  295.  
  296. void init(void)
  297. {
  298.   int i;
  299.  
  300.   NewList(&list[0]);
  301.   NewList(&list[1]);
  302.   for(i = 0;i<20;i++)
  303.   {
  304.     if (node = AllocMem(sizeof(struct Node),MEMF_CLEAR | MEMF_PUBLIC))
  305.     {
  306.       node->ln_Name = txt[i];
  307.       AddTail(&list[0],node);
  308.     }
  309.   }
  310.   in.in_Name = "** New **";
  311.   in.in_Image = &newImg;
  312. }
  313.  
  314.  
  315. void main(int argc, char **argv)
  316. {
  317.   if (GTDragBase = OpenLibrary("gtdrag.library",2))
  318.   {
  319.     if (GTD_AddAppA("dragtest",NULL))
  320.     {
  321.       if (scr = LockPubScreen(NULL))
  322.       {
  323.         vi = GetVisualInfo(scr,TAG_END);
  324.         fontheight = scr->Font->ta_YSize;
  325.         init();
  326.  
  327.         if (win = initWindow())
  328.         {
  329.           processMsg();
  330.           CloseWindow(win);
  331.         }
  332.  
  333.         FreeVisualInfo(vi);
  334.         UnlockPubScreen(NULL,scr);
  335.       }
  336.       GTD_RemoveApp();
  337.     }
  338.     CloseLibrary(GTDragBase);
  339.   }
  340. }
  341.